[INV-BACKEND-031] Создать метод rpc mutateRecipeBalances(RecipeDeductRequest)
Реализация gRPC-метода каскадного FIFO-вычета с теневым маскированием
NoteКраткая карточка задачи
- Репозиторий / Компонент:
fridge-service(Домен INVENTORY). - Контракт метода: gRPC
rpc mutateRecipeBalances(RecipeDeductRequest) returns (MutateResponse). - Ссылка на Метод: Спецификация публикации фактов создания готовых блюд
- Статус: Готово к реализации
- Инструкция по шагам:
- Принять gRPC-запрос мутации балансов от сервиса готовки. Открыть ACID-транзакцию в
PostgreSQL Fridge DB. - На Шаге 12–13: Оценить параметр
space_typeна развилкеSpace_Check.- Если
space_type == "OFFICE"(Шаг 13а): Проверить физическое наличие сырья на балансе. Если расход превышает фактический остаток партии — выполнить принудительныйROLLBACKи вернуть gRPC-ошибку приложенияINSUFFICIENT_STOCK. - Если
space_type == "HOME"(Шаг 13б): Выполнить каскадный вычет объемов из таблицыfridge_inventoryпо FIFO-индексу (created_at ASC). Разрешить уход баланса списываемых партий в реальный отрицательный показатель (знак минус в ячейке СУБД) для фиксации скрытого дефицита.
- Если
- На Шаге 14–15 (Паттерн Data Masking): Выгрузить измененные балансы для формирования gRPC-ответа. Реализовать транспортный фильтр-маскировщик: если результирующий вес записи в БД
< 0, динамически подменить это значение на0в исходящем protobuf/JSON пакете для шлюза, исключая трансляцию отрицательных чисел на мобильный клиент. - Сделать
INSERTзаписи готового порционного блюда в инвентарь холодильника, зафиксировать транзакцию (COMMIT) и отдать gRPC-ответ.
- Принять gRPC-запрос мутации балансов от сервиса готовки. Открыть ACID-транзакцию в